Google の reCAPTCHA について調べてみた
こんにちは。prismatix事業部Devチームの中島です。 今回はGoogleのreCAPTCHAについて調べてみました。
概要 - Google reCAPTCHAとは
reCAPTCHAとは、CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)の一種で、2007年にカーネギーメロン大学ピッツバーグ本校にて開発されたシステムを2009年にGoogleが買い取りました。
以下のようなチェックボックスや「○○のタイルをすべて選択してください」のような画像を選択するモーダルをみたことある人も多いかと思いますが、あれのことです(もっとも、後述のV3やEnterpriseの場合はチェックボックス自体表示されなくなっていますが)。
botによる不正なアクセスを防ぐために用いられ、ログイン画面やお問い合わせフォームなどに設置されることが多いです。
種類
V1
すでにサービス提供終了済み。 歪んだ文字列の内容を読み取ってフォームに記入することで認証を行うものです(歪んだ文字列、人間でも読み取れないことよくありましたよね・・・)。
V2
V2には、さらに、
- 「私はロボットではありません」チェックボックス
- 非表示 reCAPTCHA バッジ
- reCAPTCHA Android
の3種類があります。
「私はロボットではありません」チェックボックス
個人的に一番馴染み深いパターンです。 このパターンのreCAPTCHA V2が設置されていると、以下のようなチェックボックスが表示されます。
Googleは、このチェックボックスをクリックする際のユーザーの行動を分析し、人間かどうかを判断します。 判断できない場合、以下のように「○○のタイルをすべて選択してください」のような画像を選択するモーダルが表示されます。
非表示 reCAPTCHA バッジ
このパターンのreCAPTCHA V2が設置されている場合は、Googleがバックグラウンドで人間かどうかを判断するので、ユーザーがチェックボックスをクリックする必要はありません。 Googleが人間だと判断できない場合は、「私はロボットではありません」チェックボックスパターンと同様、「○○のタイルをすべて選択してください」のような画像を選択するモーダルが表示されます。
reCAPTCHA Android
Androidアプリ向けのパターンです。このパターンでは、reCAPTCHA APIとして、デバイス認証やセーフブラウジングなどのサービスを通じてモバイルアプリを保護する「Google SafetyNet」の一部として提供されます。
V3
reCAPTCHA V3では、V2の「非表示 reCAPTCHA バッジ」と同様、チェックボックスは表示されず、Googleがバックグラウンドで判定を行います。
V2の「非表示 reCAPTCHA バッジ」との違いは、V3ではリクエストに対して通過・拒否を返すのではなく、0.0〜1.0のスコアを返す点です。1.0に近いほど人間である可能性が高く、0.0に近いほどbotである可能性が高い、ということになります。
スコアに応じてどのような処理を行うかはreCAPTCHAを設置したアプリケーション側で実装する必要があります。例えば、スコアが一定の値以下であれば追加のMFA認証やメール確認を要求する、などの処理を実装することも可能です。
reCAPTCHAのresponseのsuccessの値のみを持って通過・拒否の判定をするのではなく、スコアの値に応じて判定を行う必要があることに注意が必要です。
Enterprise
EnterproseではV3のようなスコアによる検証と、チェックボックスによる検証のどちらも選択できます(ただしチェックボックスはモバイル プラットフォームには対応していない)。
Enterpriseでは加えて、Google Cloud が提供する組み込みのウェブ アプリケーション ファイアウォール(WAF)での保護や、多要素認証(MFA)のサポートなど様々な機能を使用することができます。
料金
V2, V3
1か月あたり最大100万評価までは無料です。 1秒あたり1,000回または1ヶ月あたり100万回を超える呼び出しを実行する場合は、reCAPTCHA Enterpriseを使用するか、例外承認のリクエストをする必要があります。
Enterprise
誤解されがちですが、Enterpriseでも1か月あたり最大100万評価までは無料です。100万回を超えると、料金表に応じて料金がかかります。
機能の比較
機能 | V2 | V3 | Enterprise |
---|---|---|---|
チェックボックスによる検証 | ○ | × | ○ |
スコアによる検証 | × | ○ | ○ |
WAFによる保護 | × | × | ○ |
多要素認証(MFA)のサポート(セキュリティ審査が必要) | × | × | ○ |
パスワード漏洩の検出 | × | × | ○ |
アカウント防御(セキュリティ審査が必要) | × | × | ○ |
不正行為の防止(セキュリティ審査が必要) | × | × | ○ |
スコアの粒度(セキュリティ審査が必要) | × | 4段階 | 11段階 |
まとめ
Google reCAPTCHAにはいくつかの種類がありますが、V1からの変遷を見ていると、文字識別やチェックボックスなどのユーザーに煩わしさを与えてしまう操作を極力減らしながら、botを排除する方向へとシフトしてきているのがわかります。 Google reCAPTCHAの進化に今後も注目していきたいです。